<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>05_闭包的语法糖</title>
</head>

<body>
  <!-- 
    闭包的语法糖
      书写闭包的一种语法形式
      目的: 还是和闭包一样
        只不过把 闭包返回的那个对象作出一些修饰
        用起来更舒服一些, 看起来更好看一些
      语法: 
        在函数内返回的对象中, 使用 getter获取器 和 setter 设置器来书写
          getter获取器
            get 名字() { return 你要获取的值 }
            名字你可以叫做和你需要操作的变量一样的名字
          setter 设置器
            set 名字 (val) { num = val }
            名字最好和你书写 getter 获取器的时候的名字一样, 表示这两个操作的是一个变量
  -->





  <!-- 标准语法书写闭包 -->
  <!-- <script>
    function outer() { 
      let num = 100
      let obj = {
        getNum() { return num },
        setNum(val) { num = val }
      };
      return obj
    }

    // res 是一个对象数据类型
    const res = outer()
    console.log(res);

    // 你想获取 num的值
    const getN = res.getNum();
    console.log(getN);

    // 你想设置 num的值
    const setN = res.setNum(200);
    console.log(res.getNum());
  </script> -->





  <!-- 语法糖形式书写闭包 -->
  <script>
    function outer() {
      let num = 100;
      let obj = {
        get num () { return num },
        set num (val) { num = val},
        name: 'Jack'
      }
      return obj
    }

    // res 是一个对象数据类型
    const res = outer();
    console.log(res);

    // 你想获取 num的值
    const n = res.num;
    console.log(n);

    // 你想设置 num的值
    res.num = 200;
    console.log(res.num);

  </script>
</body>

</html>
